SelectMany এবং Projection দুটি অত্যন্ত শক্তিশালী কৌশল LINQ (Language Integrated Query)-এ যা ডেটা কুয়েরি এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। তাদের ব্যবহারের ধরন এবং উদ্দেশ্য আলাদা, তবে উভয়ই ডেটা রিট্রাইভ করার পদ্ধতিকে আরও কার্যকর এবং নমনীয় করে তোলে।
SelectMany হল LINQ এর একটি মেথড যা একটি ফ্ল্যাট বা একক লিস্ট বা কালেকশন তৈরি করে, যা ভেতরের কালেকশনের উপাদানগুলিকে একত্রিত করে। এটি বিশেষভাবে ব্যবহার করা হয় যখন কোনো কালেকশন বা লিস্টের মধ্যে আরেকটি কালেকশন থাকে, এবং আপনাকে সেই ভিতরের কালেকশনগুলির উপাদানগুলি একত্রিত করতে হয়।
বিশেষত্ব:
ধরা যাক, আমাদের কাছে কিছু ছাত্রের ডেটা এবং তাদের কোর্সের তালিকা রয়েছে। আমরা চাই সমস্ত ছাত্রদের কোর্সগুলো একত্রিত করতে।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// SelectMany ব্যবহার করে সমস্ত কোর্স একত্রিত করা
var allCourses = students.SelectMany(student => student.Courses);
foreach (var course in allCourses)
{
Console.WriteLine(course);
}
Output:
Math
Science
History
Art
Physics
Chemistry
এখানে SelectMany
মেথডটি প্রতিটি ছাত্রের কোর্সগুলিকে একত্রিত করে একটি ফ্ল্যাট লিস্ট তৈরি করেছে। এর ফলে আমরা সমস্ত কোর্সগুলোকে একত্রে দেখতে পারলাম, যেগুলি প্রথমে প্রত্যেক ছাত্রের তালিকায় ছিল।
Projection হল একটি LINQ কৌশল যা কোনো একটি ডেটা কালেকশন থেকে নির্দিষ্ট অংশ বা ফিল্ড বের করতে ব্যবহৃত হয়। এটি সাধারণত Select মেথডের মাধ্যমে সম্পাদিত হয়, যা কেবলমাত্র নির্দিষ্ট ডেটা রিটার্ন করে (যেমন নির্দিষ্ট প্রপার্টি বা ফিল্ড)। Projection-এর মাধ্যমে আপনি একটি নতুন অবজেক্ট বা মান তৈরি করতে পারেন।
বিশেষত্ব:
ধরা যাক, আমাদের কাছে কিছু ছাত্রের ডেটা রয়েছে, এবং আমরা তাদের নাম এবং তাদের প্রথম কোর্সটি বের করতে চাই।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// Projection ব্যবহার করে ছাত্রদের নাম এবং প্রথম কোর্স বের করা
var studentCourses = students.Select(student => new
{
Name = student.Name,
FirstCourse = student.Courses.FirstOrDefault()
});
foreach (var student in studentCourses)
{
Console.WriteLine($"{student.Name} - {student.FirstCourse}");
}
Output:
John - Math
Jane - History
Bob - Physics
এখানে Projection ব্যবহার করে, Select
মেথডটি প্রতিটি ছাত্রের নাম এবং প্রথম কোর্সটি বের করেছে এবং একটি নতুন অ্যানোনিমাস অবজেক্ট তৈরি করেছে যা Name এবং FirstCourse প্রপার্টি ধারণ করে।
কখনও কখনও SelectMany এবং Projection একসাথে ব্যবহার করা হয় যখন আপনাকে নেস্টেড কালেকশনের উপাদানগুলি একত্রিত করতে হবে এবং সেগুলিকে একটি নতুন আকারে প্রক্ষেপণ করতে হবে।
উদাহরণ:
ধরা যাক, আমাদের কাছে কিছু ছাত্র এবং তাদের কোর্স রয়েছে, এবং আমরা প্রতিটি ছাত্রের নাম এবং তাদের কোর্সের প্রথম অক্ষর বের করতে চাই।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// SelectMany এবং Projection একসাথে ব্যবহার করা
var studentCourseInitials = students
.SelectMany(student => student.Courses, (student, course) => new
{
student.Name,
CourseInitial = course[0]
});
foreach (var student in studentCourseInitials)
{
Console.WriteLine($"{student.Name} - {student.CourseInitial}");
}
Output:
John - M
John - S
Jane - H
Jane - A
Bob - P
Bob - C
এখানে SelectMany প্রথমে ছাত্রদের কোর্সগুলিকে একত্রিত করেছে এবং তারপর Projection এর মাধ্যমে CourseInitial
হিসেবে কোর্সের প্রথম অক্ষর বের করেছে।
এটি ডেটা রিট্রাইভাল এবং ম্যানিপুলেশনকে আরও সহজ এবং কার্যকর করে তোলে, বিশেষ করে যখন অনেক স্তরের ডেটা কাজ করতে হয়।
common.read_more